package main

import (
	"context"
	"fmt"
	"time"
)

func main() {
	// 创建一个带有3秒超时的上下文
	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
	defer cancel()
	// 模拟一个耗时操作
	go someTask(ctx)
	go func() {
		time.Sleep(time.Second * 1)
		cancel()
	}()
	time.Sleep(7 * time.Second)

	// 监听context的Done通道
	select {
	case <-ctx.Done():
		fmt.Println(ctx.Err())
		if ctx.Err() == context.DeadlineExceeded {
			fmt.Println("操作已超时")
		} else if ctx.Err() == context.Canceled {
			fmt.Println("操作已取消")
		}
	}
}
func someTask(ctx context.Context) {
	// 模拟一个耗时操作
	time.Sleep(time.Second * 3)
	// 检查操作是否被取消或超时
	if ctx.Err() != nil {
		fmt.Println("操作被取消:", ctx.Err())
		return
	}

	// 继续执行其他逻辑
	fmt.Println("操作完成")
}
